home
***
CD-ROM
|
disk
|
FTP
|
other
***
search
/
Monster Media 1994 #2
/
Monster Media No. 2 (Monster Media)(1994).ISO
/
pcboard
/
dwnld30b.zip
/
DWNLD.PPS
< prev
next >
Wrap
Text File
|
1994-07-13
|
29KB
|
731 lines
;┌───────────────────────────────────────────────────────────────────────────┐
;│ DWNLD.PPE v2.2 │
;│ PCBOARD 15.1 Download Counter │
;│ │
;│ Written by Steven Hauswirth │
;│ Written in PCBoard Programming Language │
;│ │
;│ The Power Palace BBS │
;│ Node 1 - 312-594-0643 - [28.8] - 80486/40 │
;│ │
;│ This PPE is a full screen download counter that informs the user how │
;│ many files, bytes, et cetera they have flagged for download. │
;└───────────────────────────────────────────────────────────────────────────┘
STRING TEMP, CONFIG_FILE
INTEGER LANG_FLAG
LANG_FLAG = 0
IF (EXIST(PPEPATH()+PPENAME()+LANGEXT())) THEN
CONFIG_FILE = PPEPATH()+PPENAME()+LANGEXT()
ELSE
CONFIG_FILE = PPEPATH()+PPENAME()+".CFG"
LANG_FLAG = 1
ENDIF
IF (!ANSION()) THEN
TEMP = READLINE(CONFIG_FILE,1)
PRINT TEMP
GOTO EXIT
ENDIF
;┌───────────────────────────────────────────────────────────────────────────┐
;│ Declare Variable Types │
;└───────────────────────────────────────────────────────────────────────────┘
STRING Y, FILE_NAME, FLAG_FILE, NO_TIME, FREE_FILE, TEMP_FILE
STRING FLIST_TIME, TEMP_TIME, HEADER, FOOTER, SPACES, REM_FILE
STRING BORDER_COLOR, TITLE_COLOR, BAR_COLOR, CENTER_SPACES
STRING SHOW_NUM, SHOW_SIZE, SHOW_DATE, SHOW_TIME, SHOW_FREE, SHOW_NOTIME
string LANG_YES, LANG_NO, FILE_COLOR, OUT_FOOTER
INTEGER COUNT, LOOP, BAT_MIN, BAT_SEC, BAT_TIME, FILE_SEC, FILE_MIN
INTEGER TEMP1, TEMP2, TEMP3, FILE_SIZE, FILE_NUM, AMOUNT_SPACES, SHOW_AMOUNT
INTEGER CONSTANT1, CONSTANT2, FLIST_TOTAL_DATE, FLIST_TOTAL_TIME
INTEGER TEMP_TOTAL_DATE, TEMP_TOTAL_TIME, SKIP_FLAG, EXTRA, UP_FILE_NUM
DATE FILE_DATE, FLIST_DATE, TEMP_DATE
INTEGER TOTAL_FILE_NUM
string NUM_COLOR, SIZE_COLOR, DATE_COLOR, TIME_COLOR, FREE_COLOR, NOTIME_COLOR
STRING NUM_WORD, SIZE_WORD, DATE_WORD, TIME_WORD, FREE_WORD, NOTIME_WORD
STRING FILE_WORD, LANG_MIN, LANG_SEC, LANG_FILES, DOWN_CHAR, REMOVE_CHAR
STRING SIZE_SPACES, DATE_SPACES, TIME_SPACES, FREE_SPACES, NOTIME_SPACES
STRING FILE_CHAR, PROT_DAT, PROT_NAME, AVAIL_PROT, WHICH_PROT, UP_CHAR
INTEGER FILE_CHAR_NUM, POS_X, POS_Y, NUM_BYTES, REMOVE_SIZE, BREAK_FLAG
STRING COMPRESS1, COMPRESS2, VIEW_CHAR, PROT_CHAR, REM_CHAR, CONT_CHAR
STRING SEARCH_TEXT
;┌───────────────────────────────────────────────────────────────────────────┐
;│ Initialize the variables and get the temp and flagged file names │
;└───────────────────────────────────────────────────────────────────────────┘
WRUNET PCBNODE(),"Q",UN_NAME(),UN_CITY(),"Using: DWNLD.PPE"," "
IF (PCBNODE() = 0) THEN
LET FLAG_FILE = GETENV("PCBDRIVE")+GETENV("PCBDIR")+"\FLIST."
ELSE
LET FLAG_FILE = GETENV("PCBDRIVE")+GETENV("PCBDIR")+"\FLIST."+STRING(PCBNODE())
ENDIF
LET TEMP_FILE = GETENV("PCBDRIVE")+GETENV("PCBDIR")+"\FLIST.TMP"
LET SPACES = " "
LET FILE_NUM = 0
BAT_TIME = 0
BREAK_FLAG = 0
TEMP1 = 0
TEMP2 = 0
TEMP3 = 0
EXTRA = 0
LET Y = 1
LET CONSTANT1 = 10000
LET CONSTANT2 = 100
LET AMOUNT_SPACES = 16
LET SHOW_AMOUNT = 2
LET LOOP = 1
NUM_COLOR = "@X0F"
FILE_COLOR = "@X0F"
SIZE_COLOR = "@X0F"
DATE_COLOR = "@X0F"
TIME_COLOR = "@X0F"
FREE_COLOR = "@X0F"
NOTIME_COLOR = "@X0F"
;┌───────────────────────────────────────────────────────────────────────────┐
;│ Find the NATIVE "yes" and "no" characters for the language in effect │
;└───────────────────────────────────────────────────────────────────────────┘
IF (LANG_FLAG = 0) THEN
LANG_NO = NOCHAR()
LANG_YES = YESCHAR()
ELSE
LANG_YES = "Y"
LANG_NO = "N"
ENDIF
;┌───────────────────────────────────────────────────────────────────────────┐
;│ Calculate the time and date of the flagged file list │
;└───────────────────────────────────────────────────────────────────────────┘
FLIST_DATE = FILEINF(FLAG_FILE,2)
LET FLIST_TOTAL_DATE = MONTH(FILEINF(FLAG_FILE,2))*CONSTANT2 + DAY(FILEINF(FLAG_FILE,2))
FLIST_TIME = FILEINF(FLAG_FILE,3)
LET FLIST_TOTAL_TIME = HOUR(FLIST_TIME)*CONSTANT1 + MIN(FLIST_TIME)*CONSTANT2 + SEC(FLIST_TIME)
;┌───────────────────────────────────────────────────────────────────────────┐
;│ Read Config File to see if file numbers are to be displayed │
;└───────────────────────────────────────────────────────────────────────────┘
TEMP = TRIM(TEMP,CHR(32))
FOPEN 2, CONFIG_FILE, O_RD, S_DN
FGET 2, SHOW_NUM
FGET 2, SHOW_NUM
LET SHOW_NUM = UPPER(SHOW_NUM)
IF (SHOW_NUM = LANG_YES) THEN
SHOW_AMOUNT = SHOW_AMOUNT + 1
FGET 2, NUM_WORD
IF (LEFT(NUM_WORD,2) = "@X") NUM_COLOR = LEFT(NUM_WORD,4)
ELSE
AMOUNT_SPACES = AMOUNT_SPACES + 4
ENDIF
FGET 2, FILE_WORD
IF (LEFT(FILE_WORD,2) = "@X") FILE_COLOR = LEFT(FILE_WORD,4)
;┌───────────────────────────────────────────────────────────────────────────┐
;│ Read Config file to see if File Size is to be displayed │
;└───────────────────────────────────────────────────────────────────────────┘
FGET 2, SHOW_SIZE
LET SHOW_SIZE = UPPER(SHOW_SIZE)
IF (SHOW_SIZE = LANG_YES) THEN
SHOW_AMOUNT = SHOW_AMOUNT + 1
FGET 2, SIZE_WORD
IF (LEFT(SIZE_WORD,2) = "@X") SIZE_COLOR = LEFT(SIZE_WORD,4)
SIZE_SPACES = (10-LEN(STRIPATX(SIZE_WORD)))/2
ELSE
AMOUNT_SPACES = AMOUNT_SPACES + 10
ENDIF
;┌───────────────────────────────────────────────────────────────────────────┐
;│ Read Config File to see if File Date is to be Displayed │
;└───────────────────────────────────────────────────────────────────────────┘
FGET 2, SHOW_DATE
LET SHOW_DATE = UPPER(SHOW_DATE)
IF (SHOW_DATE = LANG_YES) THEN
SHOW_AMOUNT = SHOW_AMOUNT + 1
FGET 2, DATE_WORD
IF (LEFT(DATE_WORD,2) = "@X") DATE_COLOR = LEFT(DATE_WORD,4)
DATE_SPACES = (8-LEN(STRIPATX(DATE_WORD)))/2
ELSE
AMOUNT_SPACES = AMOUNT_SPACES + 8
ENDIF
;┌───────────────────────────────────────────────────────────────────────────┐
;│ Read Config File to see if File Transfer Time is to be Displayed │
;└───────────────────────────────────────────────────────────────────────────┘
FGET 2, SHOW_TIME
LET SHOW_TIME = UPPER(SHOW_TIME)
IF (SHOW_TIME = LANG_YES) THEN
SHOW_AMOUNT = SHOW_AMOUNT + 1
FGET 2, TIME_WORD
IF (LEFT(TIME_WORD,2) = "@X") TIME_COLOR = LEFT(TIME_WORD,4)
TIME_SPACES = (15-LEN(STRIPATX(TIME_WORD)))/2
ELSE
AMOUNT_SPACES = AMOUNT_SPACES + 15
ENDIF
;┌───────────────────────────────────────────────────────────────────────────┐
;│ Read Config File to see if Free File Check is to be Displayed │
;└───────────────────────────────────────────────────────────────────────────┘
FGET 2, SHOW_FREE
LET SHOW_FREE = UPPER(SHOW_FREE)
IF (SHOW_FREE = LANG_YES) THEN
SHOW_AMOUNT = SHOW_AMOUNT + 1
FGET 2, FREE_WORD
IF (LEFT(FREE_WORD,2) = "@X") FREE_COLOR = LEFT(FREE_WORD,4)
FREE_SPACES = (4-LEN(STRIPATX(FREE_WORD)))/2
ELSE
AMOUNT_SPACES = AMOUNT_SPACES + 4
ENDIF
;┌───────────────────────────────────────────────────────────────────────────┐
;│ Read Config File to see if No Time check is to be Displayed │
;└───────────────────────────────────────────────────────────────────────────┘
FGET 2, SHOW_NOTIME
LET SHOW_NOTIME = UPPER(SHOW_NOTIME)
IF (SHOW_NOTIME = LANG_YES) THEN
SHOW_AMOUNT = SHOW_AMOUNT + 1
FGET 2, NOTIME_WORD
IF (LEFT(NOTIME_WORD,2) = "@X") NOTIME_COLOR = LEFT(NOTIME_WORD,4)
NOTIME_SPACES = (6-LEN(STRIPATX(NOTIME_WORD)))/2
ELSE
AMOUNT_SPACES = AMOUNT_SPACES + 7
ENDIF
AMOUNT_SPACES = AMOUNT_SPACES / SHOW_AMOUNT
LET CENTER_SPACES = LEFT(SPACES,AMOUNT_SPACES)
;┌───────────────────────────────────────────────────────────────────────────┐
;│ Check to see if the PPE is already running, if so then skip header disp │
;└───────────────────────────────────────────────────────────────────────────┘
FGET 2, LANG_MIN
FGET 2, LANG_SEC
FGET 2, LANG_FILES
FGET 2, BORDER_COLOR
FGET 2, TITLE_COLOR
FGET 2, BAR_COLOR
FGET 2, HEADER
FGET 2, FOOTER
FGET 2, OUT_FOOTER
FGET 2, WHICH_PROT
FGET 2, VIEW_CHAR
FGET 2, REM_CHAR
FGET 2, PROT_CHAR
FGET 2, CONT_CHAR
FGET 2, REM_FILE
FGET 2, COMPRESS1
FGET 2, COMPRESS2
FCLOSE 2
;┌───────────────────────────────────────────────────────────────────────────┐
;│ If the temp file exists then calculate the time and date of it. Then │
;│ compare it to the flagged file list to see if which is older │
;└───────────────────────────────────────────────────────────────────────────┘
IF (EXIST(TEMP_FILE)) THEN
TEMP_DATE = FILEINF(TEMP_FILE,2)
LET TEMP_TOTAL_DATE = MONTH(TEMP_DATE)*CONSTANT2 + DAY(TEMP_DATE)
IF (TEMP_TOTAL_DATE < FLIST_TOTAL_DATE) GOTO SKIP
TEMP_TIME = FILEINF(TEMP_FILE,3)
LET TEMP_TOTAL_TIME = HOUR(TEMP_TIME)*CONSTANT1 + MIN(TEMP_TIME)*CONSTANT2 + SEC(TEMP_TIME)
IF (TEMP_TOTAL_TIME < FLIST_TOTAL_TIME) GOTO SKIP
FOPEN 2, TEMP_FILE, O_RD, S_DN
FGET 2,TEMP1
FCLOSE 2
ELSE GOTO SKIP
ENDIF
IF (TEMP1 > FLAGCNT()) THEN
DELETE TEMP_FILE
GOTO SKIP
ENDIF
IF (TEMP1 = FLAGCNT()) WAIT
:SKIP
;┌───────────────────────────────────────────────────────────────────────────┐
;│ Create a temp file that will hold the number of files that are flagged │
;│ for download. │
;└───────────────────────────────────────────────────────────────────────────┘
TEMP1 = 0
FOPEN 2, TEMP_FILE, O_WR, S_DN
FPUT 2, FLAGCNT()
FCLOSE 2
TOTAL_FILE_NUM = FLAGCNT()
;┌───────────────────────────────────────────────────────────────────────────┐
;│ Check to see if the PPE is already running. If so then dont redisplay │
;│ the full header again. │
;└───────────────────────────────────────────────────────────────────────────┘
FOPEN 1,FLAG_FILE,O_RW,S_DN
FDEFIN 1
:BACK_TO_TOP
COLOR @X0F
BREAK_FLAG = 0
ANSIPOS 1,5
TEMP = SCRTEXT(3,18,1,FALSE)
IF (TEMP = "└") THEN
SKIP_FLAG = 1
ANSIPOS 1,5
GOTO SKIP_HEADER
ELSE SKIP_FLAG = 0
ENDIF
;┌───────────────────────────────────────────────────────────────────────────┐
;│ Display the header │
;└───────────────────────────────────────────────────────────────────────────┘
IF (GRAFMODE()="R") THEN
PRINTLN ""
PRINTLN "!|1K|*"
ENDIF
PRINTLN "@CLS@@POFF@"+BORDER_COLOR+" ┌──────────────────────────────────────────────────────────────────────────┐"
LET TEMP = STRIPATX(HEADER)
PRINTLN " │"+LEFT(SPACES,37-(LEN(TEMP)/2))+HEADER+RIGHT(SPACES,37-(LEN(TEMP)/2))+BORDER_COLOR+"│"
PRINT " │"+TITLE_COLOR
;┌───────────────────────────────────────────────────────────────────────────┐
;│ Display the sysop configurable file info │
;└───────────────────────────────────────────────────────────────────────────┘
IF (SHOW_NUM = LANG_YES) PRINT CENTER_SPACES+NUM_COLOR+NUM_WORD
PRINT CENTER_SPACES+LEFT(SPACES,(12-LEN(STRIPATX(FILE_WORD)))/2)+FILE_COLOR+FILE_WORD+LEFT(SPACES,(12-LEN(STRIPATX(FILE_WORD)))/2)+CENTER_SPACES
IF (SHOW_SIZE = LANG_YES) PRINT LEFT(SPACES,SIZE_SPACES)+SIZE_COLOR+SIZE_WORD+LEFT(SPACES,10-SIZE_SPACES-LEN(STRIPATX(SIZE_WORD)))+CENTER_SPACES
IF (SHOW_DATE = LANG_YES) PRINT LEFT(SPACES,DATE_SPACES)+DATE_COLOR+DATE_WORD+LEFT(SPACES,8-DATE_SPACES-LEN(STRIPATX(DATE_WORD)))+CENTER_SPACES
IF (SHOW_TIME = LANG_YES) PRINT LEFT(SPACES,TIME_SPACES)+TIME_COLOR+TIME_WORD+LEFT(SPACES,15-TIME_SPACES-LEN(STRIPATX(TIME_WORD)))+CENTER_SPACES
IF (SHOW_FREE = LANG_YES) PRINT LEFT(SPACES,FREE_SPACES)+FREE_COLOR+FREE_WORD+LEFT(SPACES,4-FREE_SPACES-LEN(STRIPATX(FREE_WORD)))+CENTER_SPACES
IF (SHOW_NOTIME = LANG_YES) PRINT LEFT(SPACES,NOTIME_SPACES)+NOTIME_COLOR+NOTIME_WORD
ANSIPOS 78,3
PRINTLN BORDER_COLOR+"│"
;┌───────────────────────────────────────────────────────────────────────────┐
;│ Display the bullet bar │
;└───────────────────────────────────────────────────────────────────────────┘
PRINT " │"+BAR_COLOR
IF (SHOW_NUM = LANG_YES ) PRINT LEFT(SPACES,AMOUNT_SPACES-1)+"────"
PRINT CENTER_SPACES+"────────────"+CENTER_SPACES
IF (SHOW_SIZE = LANG_YES) PRINT "──────────"+CENTER_SPACES
IF (SHOW_DATE = LANG_YES) PRINT "────────"+CENTER_SPACES
IF (SHOW_TIME = LANG_YES) PRINT "───────────────"+CENTER_SPACES
IF (SHOW_FREE = LANG_YES) PRINT "────"+CENTER_SPACES
IF (SHOW_NOTIME = LANG_YES) PRINT "───────"
ANSIPOS 78,4
PRINTLN BORDER_COLOR+"│"
;┌───────────────────────────────────────────────────────────────────────────┐
;│ Since there are files already flagged for download. Find out how many. │
;│ If there are more then 10 then position display to only display the last │
;│ ten of them. │
;└───────────────────────────────────────────────────────────────────────────┘
:SKIP_HEADER
FSEEK 1,0,SEEK_SET(0)
COUNT = TOTAL_FILE_NUM + 1
IF (COUNT>10) THEN
FOR LOOP = 1 TO (COUNT-10)
FSEEK 1,83,SEEK_CUR(1)
FDREAD TEMP,1
IF (ASC(TEMP)!=0) TEMP1 = ASC(TEMP)
FDREAD TEMP,1
IF (ASC(TEMP)!=0) TEMP2 = 256*ASC(TEMP)
FDREAD TEMP,1
IF (ASC(TEMP)!=0) TEMP3 =65536*ASC(TEMP)
BAT_TIME = BAT_TIME + TEMP1 + TEMP2 + TEMP3
FSEEK 1,43,SEEK_CUR(1)
NEXT
ELSE COUNT = 10
ENDIF
LET Y = COUNT-9
;┌───────────────────────────────────────────────────────────────────────────┐
;│ Display the file name, bytes, and transfer time for all the files flagged │
;└───────────────────────────────────────────────────────────────────────────┘
FOR LOOP= 1 TO COUNT
GOSUB FILE_LINE
IF (BREAK_FLAG = 1) BREAK
NEXT
;┌────────────────────────────────────────────────────────────────────────────┐
;│ Display with blank lines to fill the screen to ten file placements listed │
;└────────────────────────────────────────────────────────────────────────────┘
FILE_NUM = Y - 1
FOR LOOP = LOOP TO 10
GOSUB BLANK_FILE_LINE
NEXT
;┌───────────────────────────────────────────────────────────────────────────┐
;│ Display the footer of the dispay │
;└───────────────────────────────────────────────────────────────────────────┘
PRINTLN " │ │"
LET TEMP = STRIPATX(FOOTER)
PRINTLN " │"+LEFT(SPACES,37-(LEN(TEMP)/2))+FOOTER+RIGHT(SPACES,37-(LEN(TEMP)/2))+"│"
PRINT " │ "+LANG_FILES+": @FFILES:3@"+LEFT(SPACES,12-LEN(STRIPATX(LANG_FILES)))
IF (SHOW_SIZE = LANG_YES) PRINT LEFT(SPACES,10-LEN(STRIPATX(SIZE_WORD)))+SIZE_WORD+": @FBYTES:12@"
;┌───────────────────────────────────────────────────────────────────────────┐
;│ Calculate the BATCH transfer time and display it on the screen. │
;└───────────────────────────────────────────────────────────────────────────┘
IF (SHOW_TIME = LANG_YES) THEN
PRINT LEFT(SPACES,9-LEN(STRIPATX(TIME_WORD)))+TIME_WORD+": "
BAT_MIN = BAT_TIME/60
BAT_SEC = BAT_TIME - BAT_MIN*60
PRINT STRING(BAT_MIN)+LEFT(SPACES,4-LEN(STRIPATX(LANG_MIN)))+LANG_MIN+" "+TIME_COLOR+STRING(BAT_SEC)+LEFT(SPACES,4-LEN(STRIPATX(LANG_SEC)))+LANG_SEC+" "
ENDIF
ANSIPOS 78,17
PRINTLN BORDER_COLOR+"│"
IF (SKIP_FLAG) THEN
PRINTLN
ELSE PRINTLN " └──────────────────────────────────────────────────────────────────────────┘"
ENDIF
:SKIP_FOOTER
PRINTLN LEFT(SPACES,(79-LEN(STRIPATX(OUT_FOOTER)))/2)+OUT_FOOTER+LEFT(SPACES,(79-LEN(STRIPATX(OUT_FOOTER)))/2)
CLREOL
PRINTLN
CLREOL
PRINTLN
CLREOL
;┌───────────────────────────────────────────────────────────────────────────┐
;│ Position cursor on the screen and ask for file name. Then stuff it into │
;│ keyboard buffer and exit │
;└───────────────────────────────────────────────────────────────────────────┘
IF (FILE_NUM > 9) FILE_NUM = 9
IF (SHOW_NUM = LANG_YES) EXTRA = 3 + AMOUNT_SPACES
ANSIPOS 4+AMOUNT_SPACES+EXTRA,5+FILE_NUM
PRINT " "
ANSIPOS 4+AMOUNT_SPACES+EXTRA,5+FILE_NUM
LET FILE_NAME = ""
LET FILE_CHAR = ""
FILE_CHAR_NUM = 0
;┌───────────────────────────────────────────────────────────────────────────┐
;│ Loop for keystrokes. Look for the enter key or backspace key. │
;└───────────────────────────────────────────────────────────────────────────┘
WHILE (file_char <> CHR(13)) DO
UP_FILE_NUM = TOTAL_FILE_NUM
FILE_CHAR = INKEY()
IF (FILE_CHAR = "" ) CONTINUE
IF (FILE_CHAR = CHR(13)) GOTO STUFF_KEY
IF (FILE_CHAR_NUM = 12 & FILE_CHAR != CHR(8)) CONTINUE
;┌───────────────────────────────────────────────────────────────────────────┐
;│ Test to see if key entered was a up or left arrow key │
;└───────────────────────────────────────────────────────────────────────────┘
IF (FILE_CHAR = "RIGHT" | FILE_CHAR = "UP") THEN
ANSIPOS 1,19
PRINT LEFT(SPACES, (78-LEN(STRIPATX(WHICH_PROT)))/2)+WHICH_PROT+LEFT(SPACES, (78-LEN(STRIPATX(WHICH_PROT)))/2)
ANSIPOS 4+AMOUNT_SPACES+EXTRA,5+FILE_NUM
:LOOP_UP
POS_X = GETX()
POS_Y = GETY()-1
IF (POS_Y < 5) THEN
ANSIPOS 1,POS_Y+1
POS_Y = 5
IF (UP_FILE_NUM > 0 ) THEN
FSEEK 1,0,SEEK_SET(0)
FOR LOOP = 1 TO UP_FILE_NUM - 1
FSEEK 1,129,SEEK_CUR(1)
NEXT
Y = UP_FILE_NUM
FOR LOOP = 1 TO 10
GOSUB FILE_LINE
NEXT
ELSE INC UP_FILE_NUM
ENDIF
ENDIF
DEC UP_FILE_NUM
ANSIPOS POS_X,POS_Y
COLOR @X70
FILE_CHAR = SCRTEXT(POS_X,POS_Y,12,FALSE)
FILE_CHAR = TRIM(FILE_CHAR, CHR(32))
PRINT LEFT(SPACES,12-LEN(FILE_CHAR))+FILE_CHAR
ANSIPOS POS_X,POS_Y
:LOOP_UP_KEY
UP_CHAR = INKEY()
IF (UPPER(UP_CHAR) = PROT_CHAR) GOTO DISP_PROT
IF (UPPER(UP_CHAR) = REM_CHAR) GOTO REMOVE_FILE
IF (UPPER(UP_CHAR) = VIEW_CHAR) GOTO VIEW_FILE
IF (UPPER(UP_CHAR) = CONT_CHAR) GOTO BACK_TO_TOP
IF ((UP_CHAR = "DOWN" | UP_CHAR = "LEFT") & POS_Y < 4+FILE_NUM) THEN
PRINT FILE_COLOR+LEFT(SPACES,12-LEN(FILE_CHAR))+FILE_CHAR
ANSIPOS POS_X,POS_Y
GOTO LOOP_DOWN
ENDIF
IF (UP_CHAR = "RIGHT" | UP_CHAR = "UP") THEN
PRINT FILE_COLOR+LEFT(SPACES,12-LEN(FILE_CHAR))+FILE_CHAR
ANSIPOS POS_X,POS_Y
GOTO LOOP_UP
ENDIF
GOTO LOOP_UP_KEY
ENDIF
;┌───────────────────────────────────────────────────────────────────────────┐
;│ Test to see if key entered was a down or right arrow key │
;└───────────────────────────────────────────────────────────────────────────┘
IF (FILE_CHAR = "LEFT" | FILE_CHAR = "DOWN") THEN
ANSIPOS 1,19
PRINT LEFT(SPACES, (78-LEN(STRIPATX(WHICH_PROT)))/2)+WHICH_PROT+LEFT(SPACES, (78-LEN(STRIPATX(WHICH_PROT)))/2)
ANSIPOS 4+AMOUNT_SPACES+EXTRA,5+FILE_NUM
:LOOP_DOWN
POS_X = GETX()
POS_Y = GETY()+1
INC UP_FILE_NUM
IF (POS_Y > 5+FILE_NUM) THEN
POS_Y = POS_Y - 1
IF (UP_FILE_NUM > 0 & UP_FILE_NUM < TOTAL_FILE_NUM) THEN
ANSIPOS 1,5
FSEEK 1,0,SEEK_SET(0)
FOR LOOP = 1 TO UP_FILE_NUM-9
FSEEK 1,129,SEEK_CUR(1)
NEXT
Y = UP_FILE_NUM-8
FOR LOOP = 1 TO 10
GOSUB FILE_LINE
NEXT
ELSE DEC UP_FILE_NUM
ENDIF
ENDIF
ANSIPOS POS_X,POS_Y
FILE_CHAR = SCRTEXT(POS_X,POS_Y,12,FALSE)
FILE_CHAR = TRIM(FILE_CHAR, CHR(32))
COLOR @X70
PRINT LEFT(SPACES,12-LEN(FILE_CHAR))+FILE_CHAR
ANSIPOS POS_X,POS_Y
:LOOP_DOWN_KEY
DOWN_CHAR = INKEY()
IF (UPPER(DOWN_CHAR) = PROT_CHAR) GOTO DISP_PROT
IF (UPPER(DOWN_CHAR) = REM_CHAR) GOTO REMOVE_FILE
IF (UPPER(DOWN_CHAR) = VIEW_CHAR) GOTO VIEW_FILE
IF (UPPER(DOWN_CHAR) = CONT_CHAR) GOTO BACK_TO_TOP
IF (DOWN_CHAR = "RIGHT" | DOWN_CHAR = "UP") THEN
PRINT FILE_COLOR+LEFT(SPACES,12-LEN(FILE_CHAR))+FILE_CHAR
ANSIPOS POS_X,POS_Y
GOTO LOOP_UP
ENDIF
IF (DOWN_CHAR = "DOWN" | DOWN_CHAR = "LEFT") THEN
PRINT FILE_COLOR+LEFT(SPACES,12-LEN(FILE_CHAR))+FILE_CHAR
ANSIPOS POS_X,POS_Y
GOTO LOOP_DOWN
ENDIF
GOTO LOOP_DOWN_KEY
ENDIF
;┌───────────────────────────────────────────────────────────────────────────┐
;│ Handle the Backspace key to move backwards and also remove the character. │
;└───────────────────────────────────────────────────────────────────────────┘
IF (FILE_CHAR = CHR(8)) THEN
DEC FILE_CHAR_NUM
IF (FILE_CHAR_NUM <0) THEN
FILE_CHAR_NUM = 0
GOTO SKIP_FILE_CHAR
ENDIF
FILE_NAME = LEFT(FILE_NAME,FILE_CHAR_NUM)
PRINT FILE_CHAR+" "+FILE_CHAR
ELSE
INC FILE_CHAR_NUM
FILE_NAME = FILE_NAME + FILE_CHAR
PRINT FILE_CHAR
ENDIF
:SKIP_FILE_CHAR
ENDWHILE
:STUFF_KEY
ANSIPOS 1,19
CLREOL
FILE_NAME=TRIM(FILE_NAME,CHR(32))
IF (LEN(FILE_NAME) = 0) FILE_NAME = CHR(13)
:STUFF_KEY2
FCLOSE 1
KBDSTUFF file_name
:EXIT
END
;┌───────────────────────────────────────────────────────────────────────────┐
;│ Remove the Chosen file from the batch │
;└───────────────────────────────────────────────────────────────────────────┘
:REMOVE_FILE
COLOR @X0F
POS_X = GETX()
POS_Y = GETY()
FILE_CHAR = SCRTEXT(POS_X,POS_Y,12,FALSE)
FILE_CHAR = TRIM(FILE_CHAR, CHR(32))
ANSIPOS 1,19
PRINT LEFT(SPACES, (78-LEN(STRIPATX(REM_FILE)))/2)+REM_FILE+LEFT(SPACES, (78-LEN(STRIPATX(REM_FILE)))/2)
FSEEK 1,0,SEEK_SET(0)
FOR LOOP = 1 TO 100000
FSEEK 1,66,SEEK_CUR(1)
FDREAD FILE_NAME,13
IF (FILE_NAME = FILE_CHAR) GOTO SKIP_ERROR
IF (FERR(1)) BREAK
FSEEK 1,50,SEEK_CUR(1)
NEXT
PRINT FILE_COLOR+LEFT(SPACES,12-LEN(FILE_CHAR))+FILE_CHAR
ANSIPOS 1,19
PRINT LEFT(SPACES,(79-LEN(STRIPATX(OUT_FOOTER)))/2)+OUT_FOOTER+LEFT(SPACES,(79-LEN(STRIPATX(OUT_FOOTER)))/2)
ANSIPOS 4+AMOUNT_SPACES+EXTRA,5+FILE_NUM
GOTO SKIP_FILE_CHAR
:SKIP_ERROR
NUM_BYTES = (LOOP-1)*129+1
FSEEK 1,num_bytes+128,SEEK_SET(0)
WHILE (!FERR(1)) DO
FREAD 1,REMOVE_CHAR,1
IF (FERR(1) ) BREAK
FSEEK 1,-130,SEEK_CUR(1)
FWRITE 1,REMOVE_CHAR,1
FSEEK 1,129,SEEK_CUR(1)
ENDWHILE
FSEEK 1,-129,SEEK_CUR(1)
FOR LOOP = 1 TO 129
FWRITE 1,"",1
NEXT
FFLUSH 1
GOTO BACK_TO_TOP
;┌───────────────────────────────────────────────────────────────────────────┐
;│ Use PKUNZIP to view the contents of the chosed file │
;└───────────────────────────────────────────────────────────────────────────┘
:VIEW_FILE
COLOR @X0F
POS_X = GETX()
POS_Y = GETY()
FILE_CHAR = SCRTEXT(POS_X,POS_Y,12,FALSE)
FILE_CHAR = TRIM(FILE_CHAR, CHR(32))
IF (LEN(FILE_CHAR) = 0 ) GOTO BACK_TO_TOP
;FCLOSE 1
;FOPEN 1,FLAG_FILE,O_RD,S_DN
;FDEFIN 1
FSEEK 1,0,SEEK_SET(0)
WHILE (!FERR(1) ) DO
FSEEK 1,66,SEEK_CUR(1)
FREAD 1,FILE_NAME,13
IF (FILE_NAME = FILE_CHAR) BREAK
FSEEK 1,50,SEEK_CUR(1)
ENDWHILE
FSEEK 1,-79,SEEK_CUR(1)
FREAD 1,FILE_NAME,65
FILE_NAME = TRIM(FILE_NAME,CHR(32))
IF (UPPER(RIGHT(FILE_NAME,3)) = "ZIP") THEN
SHELL TRUE,LOOP,COMPRESS1,FILE_NAME+" -vbn >"+GETENV("PCBDRIVE")+GETENV("PCBDIR")+"\FLIST.LST"
SEARCH_TEXT = "Searching ZIP:"
ELSE IF (UPPER(RIGHT(FILE_NAME,3)) = "ARJ") THEN
SHELL TRUE,LOOP,COMPRESS2,"l "+FILE_NAME+" >"+GETENV("PCBDRIVE")+GETENV("PCBDIR")+"\FLIST.LST"
SEARCH_TEXT = "Processing arc"
ENDIF
FOPEN 3,GETENV("PCBDRIVE")+GETENV("PCBDIR")+"\FLIST.LST",O_RD,S_DN
CLS
PRINT "@POFF@"
WHILE (LEFT(FILE_NAME,14) != Search_TEXT) DO
FGET 3,FILE_NAME
IF (FERR(3)) THEN
FCLOSE 3
GOTO BACK_TO_TOP
ENDIF
ENDWHILE
WHILE (!FERR(3)) DO
FGET 3,FILE_NAME
PRINTLN FILE_NAME
ENDWHILE
FCLOSE 3
WAIT
GOTO BACK_TO_TOP
;┌───────────────────────────────────────────────────────────────────────────┐
;│ Display Available Protocols to the User and Use Prompt #280 from PCBTEXT │
;│ that is being used to ask which protocol to use │
;└───────────────────────────────────────────────────────────────────────────┘
:DISP_PROT
COLOR @X07
PROT_DAT = READLINE(PCBDAT(),45)
CLS
FOPEN 5,prot_dat,O_RD,S_DN
:PROT_LOOP
FGET 5, PROT_NAME
IF (FERR(5)) THEN
FCLOSE 5
PROMPTSTR 280,file_name,1,AVAIL_PROT+"Nn",LFAFTER
IF (TRIM(FILE_NAME,CHR(32)) = "") FILE_NAME = "N"
GOTO STUFF_KEY2
ENDIF
AVAIL_PROT = AVAIL_PROT+LEFT(PROT_NAME,1)
AVAIL_PROT = AVAIL_PROT+LOWER(LEFT(PROT_NAME,1))
PRINT "("+LEFT(PROT_NAME,1)+") "
PROT_NAME = RIGHT(PROT_NAME, LEN(PROT_NAME)-INSTR(PROT_NAME,","))
PROT_NAME = RIGHT(PROT_NAME, LEN(PROT_NAME)-INSTR(PROT_NAME,","))
PROT_NAME = RIGHT(PROT_NAME, LEN(PROT_NAME)-INSTR(PROT_NAME,","))
PRINTLN LEFT(PROT_NAME,INSTR(PROT_NAME,",")-1)
GOTO PROT_LOOP
;┌───────────────────────────────────────────────────────────────────────────┐
;│ Display Line of File Stats │
;└───────────────────────────────────────────────────────────────────────────┘
:FILE_LINE
TEMP1 = 0
TEMP2 = 0
TEMP3 = 0
FREAD 1,TEMP,66
IF (FERR(1) | TEMP = "") THEN
BREAK_FLAG = 1
RETURN
ENDIF
TEMP = TRIM(TEMP,CHR(32))
FILE_DATE = FILEINF(TEMP,2)
FDREAD FILE_NAME,13
FDREAD TEMP,1
IF (ASC(TEMP)!=0) TEMP1 = ASC(TEMP)
FDREAD TEMP,1
IF (ASC(TEMP)!=0) TEMP2 = 256*ASC(TEMP)
FDREAD TEMP,1
IF (ASC(TEMP)!=0) TEMP3 =65536*ASC(TEMP)
FILE_SIZE = TEMP1+TEMP2+TEMP3
TEMP1 = 0
TEMP2 = 0
TEMP3 = 0
FSEEK 1,1,SEEK_CUR(1)
FDREAD TEMP,1
IF (ASC(TEMP)!=0) TEMP1 = ASC(TEMP)
FDREAD TEMP,1
IF (ASC(TEMP)!=0) TEMP2 = 256*ASC(TEMP)
FDREAD TEMP,1
IF (ASC(TEMP)!=0) TEMP3 =65536*ASC(TEMP)
FILE_SEC = TEMP1 + TEMP2 + TEMP3
BAT_TIME = BAT_TIME + FILE_SEC
FSEEK 1,9,SEEK_CUR(1)
FDREAD FREE_FILE,1
FDREAD NO_TIME,1
FSEEK 1,32,SEEK_CUR(1)
FILE_MIN = FILE_SEC/60
FILE_SEC = FILE_SEC - FILE_MIN*60
PRINT BORDER_COLOR+" │"
IF (SHOW_NUM = LANG_YES ) PRINT CENTER_SPACES+NUM_COLOR+LEFT(SPACES,2-LEN(STRING(Y)))+STRING(Y)+" "
PRINT CENTER_SPACES+FILE_COLOR+LEFT(SPACES,12-LEN(FILE_NAME))+FILE_NAME+CENTER_SPACES
IF (SHOW_SIZE = LANG_YES) PRINT LEFT(SPACES,10-LEN(STRING(FILE_SIZE)))+SIZE_COLOR+STRING(FILE_SIZE)+CENTER_SPACES
IF (SHOW_DATE = LANG_YES) PRINT DATE_COLOR+STRING(FILE_DATE)+CENTER_SPACES
IF (SHOW_TIME = LANG_YES) PRINT TIME_COLOR+LEFT(SPACES,4-LEN(STRING(FILE_MIN)))+STRING(FILE_MIN)+LEFT(SPACES,4-LEN(STRIPATX(LANG_MIN)))+LANG_MIN+TIME_COLOR+LEFT(SPACES,3-LEN(STRING(FILE_SEC)))+STRING(FILE_SEC)+LEFT(SPACES,4-LEN(STRIPATX(LANG_SEC)))+LANG_SEC+CENTER_SPACES
IF (SHOW_FREE = LANG_YES) THEN
IF (ASC(FREE_FILE)=1) THEN
PRINT FREE_COLOR+" "+LANG_YES
ELSE PRINT FREE_COLOR+" "+LANG_NO
ENDIF
PRINT CENTER_SPACES
ENDIF
IF (SHOW_NOTIME = LANG_YES) THEN
IF (ASC(NO_TIME)=1) THEN
PRINT NOTIME_COLOR+" "+LANG_YES
ELSE PRINT NOTIME_COLOR+" "+LANG_NO
ENDIF
ENDIF
ANSIPOS 78,4+LOOP
PRINTLN BORDER_COLOR+"│"
ANSIPOS 1,5+LOOP
INC Y
:BACK_FILE_LINE
RETURN
;┌───────────────────────────────────────────────────────────────────────────┐
;│ Display Blank Line of File Stats │
;└───────────────────────────────────────────────────────────────────────────┘
:BLANK_FILE_LINE
PRINT BORDER_COLOR+" │"
IF (SHOW_NUM = LANG_YES ) PRINT CENTER_SPACES+NUM_COLOR+LEFT(SPACES,2-LEN(STRING(Y)))+STRING(Y)+" "
PRINT CENTER_SPACES+" "
IF (SHOW_SIZE = LANG_YES) PRINT SIZE_COLOR+CENTER_SPACES+" 0"
IF (SHOW_DATE = LANG_YES) PRINT DATE_COLOR+CENTER_SPACES+"00-00-00"
IF (SHOW_TIME = LANG_YES) PRINT TIME_COLOR+CENTER_SPACES+" 0"+LEFT(SPACES,4-LEN(STRIPATX(LANG_MIN)))+LANG_MIN+TIME_COLOR+" 0"+LEFT(SPACES,4-LEN(STRIPATX(LANG_SEC)))+LANG_SEC
ANSIPOS 78,4+LOOP
PRINTLN BORDER_COLOR+"│"
INC Y
IF (SKIP_FLAG) THEN
ANSIPOS 1,19
GOTO SKIP_FOOTER
ENDIF
RETURN